<!DOCTYPE html>
<html>
<head>
    <title>RateIt</title>
    <link href="../src/rateit.css" rel="stylesheet" type="text/css">

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>

    <style>
        body {
            font-family: Tahoma;
            font-size: 12px;
        }

        h1 {
            font-size: 1.7em;
        }

        h2 {
            font-size: 1.5em;
        }

        h3 {
            font-size: 1.2em;
        }

        ul.nostyle {
            list-style: none;
        }

        ul.nostyle h3 {
            margin-left: -20px;
        }
    </style>
    <!-- alternative styles -->
    <link href="content/bigstars.css" rel="stylesheet" type="text/css">
    <link href="content/antenna.css" rel="stylesheet" type="text/css">
    <!-- syntax highlighter -->
    <link href="sh/shCore.css" rel="stylesheet" type="text/css">
    <link href="sh/shCoreDefault.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>
    RateIt plugin</h1>
<h2>
    Prerequisites</h2>
<p>
    In order to use RateIt you'll need:
<ul>
    <li><a target="_blank" href="http://www.jquery.com">jQuery 1.6.0</a> or newer.</li>
    <li>jquery.rateit.min.js, rateit.css, delete.gif, star.gif - <a href="http://rateit.codeplex.com/releases">
        Download RateIt</a></li>
    <li>Place a reference to the rateit.css stylesheet into the page head.</li>
    <li>Place a script reference to jquery.rateit.js before your &lt;/body&gt; tag.
    </li>
</ul>
</p>
<h2>
    Options</h2>
Go to the <a href="http://rateit.codeplex.com">RateIt project homepage</a> to view
the documentation.
<h2>
    Examples</h2>
<div style="font-weight: bold">
    <span id="toc"></span>
</div>
<ul class="nostyle" id="examples">
    <li id="ex_a1">
        <h3>
            1a) Basic usage</h3>
        <div class="rateit">
        </div>
        <pre class="brush: xml">
            &lt;div class="rateit">
            &lt;/div>
            </pre>
    </li>
    <li id="ex_1b">
        <h3>
            1a) Basic usage (inline element)</h3>
        <span class="rateit">
            </span>
        <pre class="brush: xml">
            &lt;span class="rateit">
            &lt;/span>
            </pre>
    </li>
    <li id="ex_2a">
        <h3>
            2a) Progressive enhancement (using HTML5 range input type)
        </h3>
        <input type="range" min="0" max="7" value="0" step="0.5" id="backing2">
        <div class="rateit" data-rateit-backingfld="#backing2">
        </div>
        <pre class="brush: xml">
            &lt;input type="range" min="0" max="7" value="0" step="0.5" id="backing2">
            &lt;div class="rateit" data-rateit-backingfld="#backing2">&lt;/div>
            </pre>
        <button onclick="$('#backing2').toggle()">
            Toggle Backing Field visibility
        </button>
    </li>
    <li id="ex_2b">
        <h3>
            2b) Progressive enhancement (using select)
        </h3>
        <select id="backing2b">
            <option value="0">Bad</option>
            <option value="1">OK</option>
            <option value="2">Great</option>
            <option value="3">Excellent</option>
        </select>
        <div class="rateit" data-rateit-backingfld="#backing2b">
        </div>
        <pre class="brush: xml">
            &lt;select id="backing2b">
                &lt;option value="0">Bad&lt;/option>
                &lt;option value="1">OK&lt;/option>
                &lt;option value="2">Great&lt;/option>
                &lt;option value="3">Excellent&lt;/option>
            &lt;/select>
            &lt;div class="rateit" data-rateit-backingfld="#backing2b">&lt;/div>
            </pre>
    </li>
    <li id="ex_3">
        <h3>
            3) Readonly and preset value</h3>
        <div class="rateit" data-rateit-value="2.5" data-rateit-ispreset="true" data-rateit-readonly="true">
        </div>
        <pre class="brush: xml">
                &lt;div class="rateit" data-rateit-value="2.5" data-rateit-ispreset="true" data-rateit-readonly="true">&lt;/div>
            </pre>
    </li>
    <li id="ex_4">
        <h3>
            4) More settings</h3>
        <input type="range" value="4" step="0.25" id="backing4">
        <div class="rateit" data-rateit-backingfld="#backing4" data-rateit-resetable="false" data-rateit-ispreset="true"
             data-rateit-min="0" data-rateit-max="10">
        </div>
        <pre class="brush: xml">
            &lt;input type="range" value="4" step="0.25" id="backing4">
            &lt;div class="rateit" data-rateit-backingfld="#backing4" data-rateit-resetable="false"  data-rateit-ispreset="true"
                data-rateit-min="0" data-rateit-max="10">
            &lt;/div>

            </pre>
    </li>
    <li id="ex_5">
        <h3>
            5) Javascript interaction</h3>
        <div class="rateit" id="rateit5" data-rateit-min="2">
        </div>
        <div>
            <span id="value5"></span><span id="hover5"></span>
        </div>

        <script type="text/javascript">
            $("#rateit5").bind('rated', function (event, value) {
                $('#value5').text('You\'ve rated it: ' + value);
            });
            $("#rateit5").bind('reset', function () {
                $('#value5').text('Rating reset');
            });
            $("#rateit5").bind('over', function (event, value) {
                $('#hover5').text('Hovering over: ' + value);
            });
        </script>

        <pre class="brush: xml">
            &lt;div class="rateit" id="rateit5" data-rateit-min="2">
            &lt;/div>
            &lt;div>
                &lt;span id="value5">&lt;/span>
                &lt;span id="hover5">&lt;/span>
            &lt;/div>

            &lt;script type="text/javascript">
                $("#rateit5").bind('rated', function (event, value) { $('#value5').text('You\'ve rated it: ' + value); });
                $("#rateit5").bind('reset', function () { $('#value5').text('Rating reset'); });
                $("#rateit5").bind('over', function (event, value) { $('#hover5').text('Hovering over: ' + value); });
            &lt;/script>            
            </pre>
    </li>
    <li id="ex_6">
        <h3>
            6) Javascript invocation</h3>
        <input type="hidden" id="backing6">
        <div id="rateit6">
        </div>

        <script type="text/javascript">
            $(function () {
                $('#rateit6').rateit({max: 20, step: 2, backingfld: '#backing6'});
            });
        </script>

        <pre class="brush: xml">
            &lt;input type="hidden" id="backing6">
            &lt;div id="rateit6">
            &lt;/div>

            &lt;script type="text/javascript">
                $(function () { $('#rateit6').rateit({ max: 20, step: 2, backingfld: '#backing6' }); });
            &lt;/script>
            </pre>
    </li>
    <li id="ex_7a">
        <h3>
            7a) Styling</h3>
        <p>
            You can change the styles of the plugin in a two ways.
        <ul>
            <li>You can change change the star.gif and delete.gif pictures (and perhaps the default
                starwidth, and starheight values in the javascript file). This will change the style
                everywhere.
            </li>
            <li>You can change individual items, by adding a stylesheet with a few rules.</li>
        </ul>
        Here I've opted for the second option.
        </p>
        <div class="rateit bigstars" data-rateit-starwidth="32" data-rateit-starheight="32">
        </div>
        <h4>
            Inline code</h4>
        <pre class="brush: xml">
            &lt;div class="rateit bigstars" data-rateit-starwidth="32" data-rateit-starheight="32">&lt;/div>
            </pre>
        <h4>
            Style sheet</h4>
        <pre class="brush: css">
            div.bigstars div.rateit-range
            {
                background: url(star-white32.png);
                height: 32px;
            }

            div.bigstars div.rateit-hover
            {
                background: url(star-gold32.png);
            }

            div.bigstars div.rateit-selected
            {
                background: url(star-red32.png);
            }

            div.bigstars div.rateit-reset
            {
                background: url(star-black32.png);
                width: 32px;
                height: 32px;
            }

            div.bigstars div.rateit-reset:hover
            {
                background: url(star-white32.png);
            }
            </pre>
    </li>
    <li id="ex_7b">
        <h3>
            7b) More styling</h3>
        <p>
            Here we use one big image (actually 3), with different dimensions. Not very pretty,
            but it conveys the message I hope.</p>
        <div class="rateit antenna" data-rateit-starwidth="11" data-rateit-starheight="25">
        </div>
        <h4>
            Inline code</h4>
        <pre class="brush: xml">
&lt;div class="rateit antenna" data-rateit-starwidth="11" data-rateit-starheight="25">&lt;/div>            
            </pre>
        <h4>
            Style sheet</h4>
        <pre class="brush: css">
div.antenna div.rateit-range
{
    background: url(antenna-black.png) no-repeat;
    height: 25px;
}

div.antenna div.rateit-hover
{
    background: url(antenna-yellow.png) no-repeat;
}

div.antenna div.rateit-selected
{
    background: url(antenna-red.png) no-repeat;
}            
            </pre>
    </li>
    <li id="ex_8">
        <h3>
            8) RTL support</h3>
        <div style="direction: rtl">
            Now we are in RTL mode. No changes needed to make this work.
            <div class="rateit">
            </div>
        </div>
    </li>
    <li id="ex_9">
        <h3>
            9) Setting and Getting values</h3>
        <p>
            All properties can also be set on the fly. Here are a few examples:</p>
        <div class="rateit" id="rateit9">
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('value'))">
                Get value
            </button>
            <button onclick="$('#rateit9').rateit('value', prompt('Input numerical value'))">
                Set value
            </button>
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('max'))">
                Get max value
            </button>
            <button onclick="$('#rateit9').rateit('max', prompt('Input numerical value'))">
                Set max value
            </button>
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('min'))">
                Get min value
            </button>
            <button onclick="$('#rateit9').rateit('min', prompt('Input numerical value'))">
                Set min value
            </button>
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('step'))">
                Get step size
            </button>
            <button onclick="$('#rateit9').rateit('step', prompt('Input numerical value'))">
                Set step size
            </button>
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('readonly'))">
                Get readonly value
            </button>
            <button onclick="$('#rateit9').rateit('readonly',!$('#rateit9').rateit('readonly'))">
                Toggle readonly
            </button>
        </div>
        <div>
            <button onclick="alert($('#rateit9').rateit('ispreset'))">
                Get ispreset value
            </button>
            <button onclick="$('#rateit9').rateit('ispreset',!$('#rateit9').rateit('ispreset'))">
                Toggle ispreset
            </button>
        </div>
        <div>
            <button onclick="$('#rateit9').rateit('reset')">
                Reset
            </button>
        </div>


        <pre class="brush: xml">
	            &lt;div class="rateit" id="rateit9">
                &lt;/div>
                &lt;div>
                    &lt;button onclick="alert($('#rateit9').rateit('value'))">Get value&lt;/button>
                    &lt;button onclick="$('#rateit9').rateit('value', prompt('Input numerical value'))">Set value&lt;/button>
                &lt;/div>
                &lt;div>
                    &lt;button onclick="alert($('#rateit9').rateit('max'))">Get max value&lt;/button>
                    &lt;button onclick="$('#rateit9').rateit('max', prompt('Input numerical value'))">Set max value&lt;/button>
                &lt;/div>
                &lt;div>
                    &lt;button onclick="alert($('#rateit9').rateit('step'))">Get step size&lt;/button>
                    &lt;button onclick="$('#rateit9').rateit('step', prompt('Input numerical value'))">Set step size&lt;/button>
                &lt;/div>
                &lt;div>
                    &lt;button onclick="alert($('#rateit9').rateit('readonly'))">Get readonly value&lt;/button>
                    &lt;button onclick="$('#rateit9').rateit('readonly',!$('#rateit9').rateit('readonly'))">Toggle readonly&lt;/button>
                &lt;/div>   
                &lt;div>
                    &lt;button onclick="alert($('#rateit9').rateit('ispreset'))">Get ispreset value&lt;/button>
                    &lt;button onclick="$('#rateit9').rateit('ispreset',!$('#rateit9').rateit('ispreset'))">Toggle ispreset&lt;/button>
                &lt;/div>   
                &lt;div>
                    &lt;button onclick="$('#rateit9').rateit('reset')">Reset&lt;/button>
                &lt;/div>                           
            </pre>
    </li>
    <li id="ex_10">
        <h3>
            10) Tooltip example</h3>
        <p>
            Using tooltips is easy. Just bind to the hover event, and do your thing. Shown here
            is the basic tooltip, but of course you can use any tooltip you'd like.</p>
        <h4>
            Basic numbers</h4>
        <div class="rateit" id="rateit10">
        </div>

        <script type="text/javascript">
            $("#rateit10").bind('over', function (event, value) {
                $(this).attr('title', value);
            });
        </script>

        <pre class="brush: xml">
            &lt;div class="rateit" id="rateit10">
            &lt;/div>

            &lt;script type="text/javascript">
                $("#rateit10").bind('over', function (event,value) { $(this).attr('title', value); });
            &lt;/script>       
            </pre>
        <h4>
            Custom text</h4>
        <div class="rateit" id="rateit10b" data-rateit-step="1">
        </div>

        <script type="text/javascript">
            var tooltipvalues = ['bad', 'poor', 'ok', 'good', 'super'];
            $("#rateit10b").bind('over', function (event, value) {
                $(this).attr('title', tooltipvalues[value - 1]);
            });
        </script>

        <pre class="brush: xml">
            &lt;div class="rateit" id="rateit10b" data-rateit-step="1">
            &lt;/div>

            &lt;script type="text/javascript">
                var tooltipvalues = ['bad', 'poor', 'ok', 'good', 'super'];
                $("#rateit10b").bind('over', function (event, value) { $(this).attr('title', tooltipvalues[value-1]); });
            &lt;/script>
            </pre>
    </li>
    <li id="ex_11">
        <h3>
            11) AJAX example</h3>
        <p>
            Most times RateIt will be used using some Ajax. There are different ways of implementing
            it (with/without backing field, using data-* attributes etc.)</p>
        <div id="products">
            <div style="float: right; width: 350px; border: 1px solid #ccc; padding: 1em;">
                <strong>Server response:</strong>
                <ul id="response">
                </ul>
            </div>
            <ul>
                <li>
                    <h4>
                        Product X (id: 312)</h4>
                    RateIt:
                    <div data-productid="312" class="rateit">
                    </div>
                </li>
                <li>
                    <h4>
                        Product Y (id: 423)</h4>
                    RateIt:
                    <div data-productid="423" class="rateit">
                    </div>
                </li>
                <li>
                    <h4>
                        Product Z (id: 653)</h4>
                    RateIt:
                    <div data-productid="653" class="rateit">
                    </div>
                </li>
            </ul>
        </div>

        <script type="text/javascript">
            //we bind only to the rateit controls within the products div
            $('#products .rateit').bind('rated reset', function (e) {
                var ri = $(this);

                //if the use pressed reset, it will get value: 0 (to be compatible with the HTML range control), we could check if e.type == 'reset', and then set the value to  null .
                var value = ri.rateit('value');
                var productID = ri.data('productid'); // if the product id was in some hidden field: ri.closest('li').find('input[name="productid"]').val()

                //maybe we want to disable voting?
                ri.rateit('readonly', true);

                $.ajax({
                    url: 'rateit.aspx', //your server side script
                    data: {id: productID, value: value}, //our data
                    type: 'POST',
                    success: function (data) {
                        $('#response').append('<li>' + data + '</li>');

                    },
                    error: function (jxhr, msg, err) {
                        $('#response').append('<li style="color:red">' + msg + '</li>');
                    }
                });
            });
        </script>

        <h4>
            Client</h4>
        <pre class="brush: xml">
           &lt;div id="products">
              &lt;div style="float:right; width:350px; border:1px solid #ccc; padding:1em;">
                &lt;strong>Server response:&lt;/strong>
                &lt;ul id="response">
                
                &lt;/ul>
                &lt;/div>
                &lt;ul>
                    &lt;li>&lt;h4>Product X (id: 312)&lt;/h4>
                    RateIt: &lt;div data-productid="312" class="rateit">&lt;/div>
                    &lt;/li>
                    &lt;li>&lt;h4>Product Y (id: 423)&lt;/h4>
                    RateIt: &lt;div data-productid="423" class="rateit">&lt;/div>&lt;/li>
                    &lt;li>&lt;h4>Product Z (id: 653)&lt;/h4>
                    RateIt: &lt;div data-productid="653" class="rateit">&lt;/div>
                    &lt;/li>
                &lt;/ul>
              
            &lt;/div>

            &lt;script type ="text/javascript">
                //we bind only to the rateit controls within the products div
                $('#products .rateit').bind('rated reset', function (e) {
                    var ri = $(this);

                    //if the use pressed reset, it will get value: 0 (to be compatible with the HTML range control), we could check if e.type == 'reset', and then set the value to  null .
                    var value = ri.rateit('value');
                    var productID = ri.data('productid'); // if the product id was in some hidden field: ri.closest('li').find('input[name="productid"]').val()

                    //maybe we want to disable voting?
                    ri.rateit('readonly', true);

                    $.ajax({
                        url: 'rateit.aspx', //your server side script
                        data: { id: productID, value: value }, //our data
                        type: 'POST',
                        success: function (data) {
                            $('#response').append('&lt;li>' + data + '&lt;/li>');

                        },
                        error: function (jxhr, msg, err) {
                            $('#response').append('&lt;li style="color:red">' + msg + '&lt;/li>');
                        }
                    });
                });
            &lt;/script>

             </pre>
        <h4>
            Server (ASPX) super simplified</h4>
        <pre class="brush: c-sharp">
&lt;%@ Page Language="C#" %>
&lt;%
    //Get value
    float value = float.Parse(Request.Form["value"]);
    int productID = int.Parse(Request.Form["id"]);

    Response.Write(string.Format("You voted {0} on product: {1}.&lt;br/>Time on server: {2}", value, productID, DateTime.Now.ToString()));

%>



             </pre>
    </li>

    <li id="ex_12">
        <h3>
            12) Resizing
        </h3>
        <p>
            Sometimes we would like to resize the rating controls (perhaps based on screen size). <br/>
            This is as easy as<br/>
            a) adding a class to the rateit control, which would change the background image.<br/>
            b) modifying the starwidth and starheigth properties.
            <br/><br/>
            The alternative styling is taken from example <a href="#ex_7a">7a) styling</a>.
        </p>

        <div class="rateit" id="rateit12">
        </div>
        <p>Pick a size: <select id="size_12">
            <option data-class="" data-size="16" selected>normal</option>
            <option data-class="bigstars" data-size="32">big</option>
        </select></p>

        <script type="text/javascript">
            $('#size_12').change(function () {
                var option = $(this.options[this.selectedIndex]);
                $('#rateit12').removeClass('bigstars')
                    .addClass(option.data('class'))
                    .rateit('starwidth', option.data('size'))
                    .rateit('starheight', option.data('size'));

            });
        </script>
        <pre class="brush: xml">
          &lt;div class=&quot;rateit&quot; id=&quot;rateit12&quot;&gt;&lt;/div&gt;
          &lt;p&gt;Pick a size: 
            &lt;select id=&quot;size_12&quot;&gt;
                &lt;option data-class=&quot;&quot; data-size=&quot;16&quot; selected&gt;normal&lt;/option&gt;
                &lt;option data-class=&quot;bigstars&quot; data-size=&quot;32&quot;&gt;big&lt;/option&gt;
            &lt;/select&gt;
          &lt;/p&gt;

          &lt;script type=&quot;text/javascript&quot;&gt;
            $(&#39;#size_12&#39;).change(function () {
              var option = $(this.options[this.selectedIndex]);
              $(&#39;#rateit12&#39;).removeClass(&#39;bigstars&#39;) //remove old class
                            .addClass(option.data(&#39;class&#39;))  //add new class
                            .rateit(&#39;starwidth&#39;, option.data(&#39;size&#39;)) //change width
                            .rateit(&#39;starheight&#39;, option.data(&#39;size&#39;)); //change height

            });
        &lt;/script&gt;  
</pre>
    </li>
</ul>

<script src="../src/jquery.rateit.js" type="text/javascript"></script>

<script>
    //build toc
    var toc = [];
    $('#examples > li').each(function (i, e) {


        if (i > 0)
            toc.push(', ');
        toc.push('<a href="#')
        toc.push(e.id)
        toc.push('">')
        var title = $(e).find('h3:first').text();
        title = title.substring(title.indexOf(')') + 2);
        toc.push(title);
        toc.push('</a>');

    });

    $('#toc').html(toc.join(''));

</script>

<!-- syntax highlighter -->

<script src="sh/shCore.js" type="text/javascript"></script>

<script src="sh/shBrushJScript.js" type="text/javascript"></script>

<script src="sh/shBrushXml.js" type="text/javascript"></script>

<script src="sh/shBrushCss.js" type="text/javascript"></script>

<script src="sh/shBrushCSharp.js" type="text/javascript"></script>

<script type="text/javascript">
    SyntaxHighlighter.all()
</script>

</body>
</html>
